草庐IT

CountDownLatch和ExecutorService 线程池cachedThreadPool.submit

全部标签

java - 列出 ThreadPoolTask​​Executor 中所有正在运行/排队的线程

我在Spring中使用ThreadPoolTask​​Executor来安排我的任务。有没有办法获取该任务执行器/池的每个正在运行和排队的线程的列表或其他信息? 最佳答案 也许不是很优雅,但通过这种方式我可以从已知的执行器中获取所有线程(使用startsWith()前缀)。SetthreadSet=Thread.getAllStackTraces().keySet();for(Threadthread:threadSet){if(thread.getName().startsWith("MyExecutor")){System.ou

java - 如何阻止一个线程修改另一个线程正在使用的数组?

我有一个java程序,它基本上是一个游戏。它有一个名为'World'的类。“World”类有一个方法'levelChanger()'和另一个方法'makeColorArray()'。publicclassWorld{privateBufferedImagemap,map1,map2,map3;privateColor[][]colorArray;publicWorld(intscrWd,intscrHi){try{map1=ImageIO.read(newFile("map1.png"));map2=ImageIO.read(newFile("map2.png"));map3=Imag

java - 将数据从多个线程发送到单个线程

我正在编写一个连接到Arduino的Java套接字服务器,Arduino反过来发送和接收数据。如Java套接字文档所示,我已将服务器设置为为每个连接打开一个新线程。我的问题是,我如何才能将数据从套接字线程发送到我的主线程?套接字将不断打开,因此必须在线程运行时发送数据。有什么建议吗?更新:服务器的目标是向Arduino发送命令(即打开或关闭灯)并从传感器接收数据,因此我需要一种方法从连接到各个线程的传感器获取数据并将它们合并为一个。 最佳答案 在线程之间共享数据总是很棘手。没有“正确”的答案,这完全取决于您的用例。我想您不是在寻找最

java - 在 Tomcat 容器中运行的 Web 应用程序是否需要关闭 ExecutorService?

如果ExecutorService在Tomcat容器中运行,是否有必要在某个时刻关闭它?如果是,那么我应该在哪里调用关机?我尝试在submit()调用之后添加它,但是当我从客户端浏览器向Servlet发出另一个请求时,我得到一个RejectedExecutionException这可能是因为我关闭了?我试图了解它在Tomcat中的Servlet中如何工作以及我应该如何使用它。我正在我的webApplication中执行以下操作(它似乎在没有任何关闭的情况下工作正常)://Inconfigurationclass@Bean(name="executorService")publicExe

java - executorService.scheduleAtFixedRate 永远运行任务

我希望任务在1分钟的间隔后永远运行。为了完成我在中写下的任务publicvoidpoll(){ScheduledExecutorServiceexecutorService=Executors.newScheduledThreadPool(1);ScheduledFuturefiles=executorService.scheduleAtFixedRate(newRunnable(){@Overridepublicvoidrun(){Stringpath="/Desktop/PNL/Test";ListfilesPaths=newArrayList();Filefolder=newFi

java - 多个线程同时使用同一个 JDBC 连接

我试图更好地理解如果多个线程尝试使用相同的JDBC连接同时执行不同的sql查询会发生什么。结果在功能上是否正确?性能影响是什么?线程A是否必须等待线程B完全完成其查询?或者线程A是否能够在线程B发送查询后立即发送查询,之后数据库将并行执行两个查询?我看到ApacheDBCP使用同步协议(protocol)来确保从池中获得的连接从池中删除,并使其不可用,直到它们关闭。这似乎比它需要的更不方便。我正在考虑通过创建打开连接的静态列表并以循环方式分发它们来构建我自己的“池”。我不介意偶尔的性能下降,每次使用后不必关闭连接的便利性似乎非常吸引人。我这样做有什么缺点吗?

java - Guava 的 Cache<K, Semaphore> 和 weakValues() 是线程安全的吗?

我需要一个按键锁定机制来保护按键绑定(bind)的关键部分。尽管ConcurrentMap对于并发就足够了,我也不希望map累积旧key并无限增长。理想情况下,数据结构最终(或之后立即)释放用于未使用锁的键的内存。我有点想Guava的Cache用weakValues()build会成功的:privatestaticfinalLoadingCacheKEY_MUTEX=CacheBuilder.newBuilder().weakValues().build(newCacheLoader(){@OverridepublicSemaphoreload(Kkey)throwsException

java - 信号量 - 为什么我的线程一个接一个地运行而不是并发运行?

我正在尝试编写一个程序,在Main类中可以启动未知数量的新线程。每个线程依次调用SingletonCopier类,该类应调用文件传输操作。我的目标是,无论线程请求的数量如何,都是将并发传输的数量限制为2个传输,所以我想用Semaphore来解决它。我的问题是,线程似乎一个接一个地运行,而不是并发运行。这是我尝试做的:publicclassCopier{privatestaticfinalintPOOL_SIZE=2;privatestaticvolatileCopierinstance=null;privatestaticSemaphoresemaphore;privateCopier

java - nanoTime 可以跨线程工作吗

我有一个线程将数据插入队列,另一个线程从队列中读取数据并进行处理。我想检查数据在处理之前在队列中的停留时间。我在第一个线程推送之前在数据中添加了一个时间参数(使用System.nanoTime()计算)。一旦第二个线程处理它,它就会计算System.nanoTime()并找到与数据中之前设置的时间的差异。这能正常工作吗?我问这个是因为我在日志中看到了负面差异。更新我想澄清一下,开始时间是由一个进程放在不同机器上的,差异是在不同机器上计算的。 最佳答案 我在线程和进程之间使用了System.nanoTime()。在单台机器上它是全局的

java - 当多个线程同时请求加载同一个类时会发生什么?

在多线程环境下,当多个线程同时引用一个类时,JVM是否最终会多次加载该类?如果不是,同步是如何发生的? 最佳答案 该类将被加载一次。参见jls12.4.2ForeachclassorinterfaceC,thereisauniqueinitializationlockLC.ThemappingfromCtoLCislefttothediscretionoftheJavaVirtualMachineimplementation.TheprocedureforinitializingCisthenasfollows:Synchroniz